<?php
/**
 * 生成框架的核心编译缓存
 */

function compile_frm($compile_mod)
{
	$runtime = array();

	/// 定义核心编译的文件
	$runtime[] = CORE_ROOT.'/include/function.inc.php';

	/// 加载框架预定义的核心编译文件列表
	$list = include CORE_ROOT.'/config/core.cfg.php';


	/// merge两个列表
	$runtime = array_merge($runtime, $list);


	if(is_file(APPLICATION_ROOT.'/config/core.cfg.php'))
	{
		/// 加载项目自定义的预加载文件列表
		$list2 = include APPLICATION_ROOT.'/config/core.cfg.php';
		$runtime = array_merge($runtime, $list2);
	}

	/// 加载核心编译文件列表
	foreach ($runtime as $key => $file){
		if (is_file($file)) require $file;
	}

	$common_cfg_name = 'common.cfg.php';
	$cfg_name = RUN_MOD.'.cfg.php';
	$db_cfg_name = RUN_MOD.'_db.cfg.php';

	/// 是否启用新版的配置文件方式
	$core_cfg = array();
	$all_cfg = array();
	if (defined('CFG_C_ON') && (CFG_C_ON == true))
	{
		/// 加载框架公用配置文件
		if (is_file(CORE_ROOT.'/config/'.$common_cfg_name)) C(include CORE_ROOT.'/config/'.$common_cfg_name);

		/// 加载惯例配置文件
		C(include CORE_ROOT.'/config/'.$cfg_name);

		/// 加载项目自定义配置文件
		if (is_file(APPLICATION_ROOT.'/config/'.$common_cfg_name)) C(include APPLICATION_ROOT.'/config/'.$common_cfg_name); // 公用
		if (is_file(APPLICATION_ROOT.'/config/'.$cfg_name)) C(include APPLICATION_ROOT.'/config/'.$cfg_name);       // 个性化

		/// 加载项目自定义DB配置文件
		if (is_file(APPLICATION_ROOT.'/config/db/'.$db_cfg_name)) C(include APPLICATION_ROOT.'/config/db/'.$db_cfg_name);
	}
	else
	{
		/// 加载惯例配置文件
		$core_cfg = include CORE_ROOT.'/config/'.$cfg_name;
		$all_cfg = $core_cfg;

		/// 新版支持
		C($core_cfg);

		/// 向后兼容
		foreach($core_cfg as $key=>$val) {
			if (!is_array($val)) define($key, $val);
		}

		/// 加载项目自定义DB配置文件
		if (is_file(APPLICATION_ROOT.'/config/db/'.$db_cfg_name)) {
			$db_cfg = include APPLICATION_ROOT.'/config/db/'.$db_cfg_name;
			$all_cfg = array_merge($all_cfg, $db_cfg);
			C($db_cfg);
		}
	}


	return ;


	/// 生成核心编译文件，去掉文件空白和注释以减少大小
	$content = '';
	foreach ($runtime as $file) {
		$content .= compile($file);
	}

	/// 是否启用新版的配置文件方式
	if (defined('CFG_C_ON') && (CFG_C_ON == true)) {
		$content .= ' $__uvan_cfg_ = '.var_export(C(), true).';C($__uvan_cfg_);';
	}
	else {
		$content .= ' $__uvan_cfg_ = '.var_export($all_cfg, true).';C($__uvan_cfg_); $__uvan_cfg2_ = '.var_export($core_cfg, true).'; foreach($__uvan_cfg2_ as $key=>$val) { if (!is_array($val)) define($key, $val); }';
	}

	/// 加载onload.cfg.php，可以用来初始化一些数据
	if (is_file($onload_cfg)) {
		require $onload_cfg;
		$content .= compile($onload_cfg);
	}

	if (in_array(RUN_MOD, $compile_mod)) {
	    $content = strip_whitespace('<?php'.$content);
	    file_put_contents(RUNTIME_PATH.'~bin.php', $content);
	    unset($content);
	}
}
